﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Sped.Sped
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SpedPisCofins.Reg0100")]
    [ComVisible(true)]
    public class Reg0100 : IBloco
    {
        /// <summary>
        /// Nome do contabilista.
        /// </summary>
        public string NOME { get; set; }
        /// <summary>
        /// Número de inscrição do contabilista no CPF.
        /// </summary>
        public string CPF { get; set; }
        /// <summary>
        /// Número de inscrição do contabilista no Conselho Regional 
        /// de Contabilidade.
        /// </summary>
        public string CRC { get; set; }
        /// <summary>
        /// Número de inscrição do escritório de contabilidade no CNPJ, 
        /// se houver.
        /// </sumamry>
        public string CNPJ { get; set; }
        /// <summary>
        /// Código de Endereçamento Postal.
        /// </summary>
        public string CEP { get; set; }
        /// <summary>
        /// Logradouro e endereço do imóvel
        /// </summary>
        public string END {get; set;}
        /// <summary>
        /// Número do imóvel
        /// </summary>
        public string NUM { get; set; }
        /// <summary>
        /// Dados complementares do endereço
        /// </summary>
        public string COMPL { get; set; }
        /// <summary>
        /// Bairro em que o imóvel está situado
        /// </summary>
        public string BAIRRO {get; set;}
        /// <summary>
        /// Número do telefone
        /// </summary>
        public string FONE { get; set; }
        /// <summary>
        /// Número do fax
        /// </summary>
        public string FAX {get; set;}
        /// <summary>
        /// Endereço do correio eletrônico
        /// </summary>
        public string EMAIL { get; set; }
        /// <summary>
        /// Código do município, conforme tabela IBGE.
        /// </summary>
        public string COD_MUN {get; set;}


        /// <summary>
        /// Valida Registro
        /// <//summary>
        public override bool ValidaRegistro(ref string Erro)
        {
            var ValidacaoOK = true;
            Erro = "";

            if (string.IsNullOrEmpty(this.NOME))
            {
                Erro += "* Registro 0100 - Nome do contabilista é Obrigatório";
                ValidacaoOK = false;
            }

            if (!this.CPF.ValidaCPF())
            {
                Erro += "* Registro 0100 - CPF do Contabilista Inválido.";
                ValidacaoOK = false;
            }

            if (string.IsNullOrEmpty(this.CRC))
            {
                Erro += "* Registro 0100 - CRC do contabilista é Obrigatório";
                ValidacaoOK = false;
            }

            if (!string.IsNullOrEmpty(this.CNPJ) && !this.CNPJ.ValidaCNPJ())
            {
                Erro += "* Registro 0100 - CNPJ do contabilista é Inválido";
                ValidacaoOK = false;
            }

            if (string.IsNullOrEmpty(this.CNPJ))
                this.CNPJ = "";
            if (string.IsNullOrEmpty(this.CEP))
                this.CEP = "";
            if (string.IsNullOrEmpty(this.END))
                this.END = "";
            if (string.IsNullOrEmpty(this.NUM))
                this.NUM = "";
            if (string.IsNullOrEmpty(this.COMPL))
                this.COMPL = "";
            if (string.IsNullOrEmpty(this.BAIRRO))
                this.BAIRRO = "";
            if (string.IsNullOrEmpty(this.FONE))
                this.FONE = "";
            if (string.IsNullOrEmpty(this.FAX))
                this.FAX = "";
            if (string.IsNullOrEmpty(this.EMAIL))
                this.EMAIL = "";
            if (string.IsNullOrEmpty(this.COD_MUN))
                this.COD_MUN = "";

            return ValidacaoOK;
        }

        public override string Layout()
        {
            var Linha = string.Empty;

            Linha += "0100" + this.Delimitador;
            Linha += this.NOME.Trim().TirarAcento() + this.Delimitador;
            Linha += this.CPF.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.CRC.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.CNPJ.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.CEP.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.END.Trim().TirarAcento() + this.Delimitador;
            Linha += this.NUM.Trim().TirarAcento() + this.Delimitador;
            Linha += this.COMPL.Trim() + this.Delimitador;
            Linha += this.BAIRRO.Trim().TirarAcento() + this.Delimitador;
            Linha += this.FONE.Trim().removeFormatacao().Replace(" ", "") + this.Delimitador;
            Linha += this.FAX.Trim().removeFormatacao().Replace(" ", "") + this.Delimitador;
            Linha += this.EMAIL.Trim() + this.Delimitador;
            Linha += this.COD_MUN.Trim() + this.Delimitador;

            return Linha.Trim();
        }
    }
}
